CronParseString Subroutine

public subroutine CronParseString(cronString, cron)

parse cron string

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: cronString
type(CronTab), intent(out) :: cron

Variables

Type Visibility Attributes Name Initial
character(len=100), public, POINTER :: args(:)
integer(kind=short), public :: dayOfMonth
integer(kind=short), public :: dayOfWeek
integer(kind=short), public :: hour
integer(kind=short), public :: i
integer(kind=short), public :: j
integer(kind=short), public :: k
integer(kind=short), public :: minute
integer(kind=short), public :: month
integer(kind=short), public :: nargs
character(len=100), public :: string
character(len=100), public, POINTER :: targs(:)
integer(kind=short), public :: tnargs

Source Code

SUBROUTINE CronParseString &
!
(cronString, cron)

IMPLICIT NONE

!Arguments with intent (in):
CHARACTER (LEN = *), INTENT (IN) :: cronString

!Arguments with intent (out):
TYPE ( CronTab ), INTENT (OUT) :: cron 

!local declarations:
CHARACTER (LEN = 100) :: string
CHARACTER (len=100), POINTER :: targs (:), args (:)
INTEGER (KIND = short) :: tnargs, nargs, i, j, k
INTEGER (KIND = short) :: minute, hour, dayOfMonth, month, dayOfWeek

!-------------------------end of declarations----------------------------------

!clean time string
string =  StringCompact ( cronString )

!save cron string
cron % string = string

!split string
CALL StringTokenize (string = string, delims = ' ', &
                     args = targs, nargs = tnargs)

!search for minutes
cron % minutes = 0
IF ( targs (1) (1:1) == '*' ) THEN
    cron % minutes = 1
ELSE IF ( INDEX (targs (1), ',' )  > 0   ) THEN
    CALL StringTokenize (string = targs (1), delims = ',', &
                         args = args, nargs = nargs)
    DO i = 1, nargs
        minute = StringToLong (args (i) )
        cron % minutes ( minute ) = 1
    END DO
ELSE IF ( INDEX (targs (1), '-' )  > 0   ) THEN
    CALL StringTokenize (string = targs (1), delims = '-', &
                         args = args, nargs = nargs)
    j = StringToLong (args (1) )
    k = StringToLong (args (2) )
    DO i = j, k
        cron % minutes ( i ) = 1
    END DO
ELSE 
    minute = StringToLong ( targs (1) )
    cron % minutes ( minute ) = 1
END IF



!search for hours
cron % hours = 0
IF ( targs (2) (1:1) == '*' ) THEN
    cron % hours = 1
ELSE IF ( INDEX (targs (2), ',' )  > 0   ) THEN
    CALL StringTokenize (string = targs (2), delims = ',', &
                         args = args, nargs = nargs)
    DO i = 1, nargs
        hour = StringToLong (args (i) )
        cron % hours ( hour ) = 1
    END DO
ELSE IF ( INDEX (targs (2), '-' )  > 0   ) THEN
    CALL StringTokenize (string = targs (2), delims = '-', &
                         args = args, nargs = nargs)
    j = StringToLong (args (1) )
    k = StringToLong (args (2) )
    DO i = j, k
        cron % hours ( i ) = 1
    END DO
ELSE 
    hour = StringToLong ( targs (2) )
    cron % hours ( hour ) = 1
END IF


!search for days of month
 cron % daysOfMonth = 0
IF ( targs (3) (1:1) == '*' ) THEN
    cron % daysOfMonth = 1
ELSE IF ( INDEX (targs (3), ',' )  > 0   ) THEN
    CALL StringTokenize (string = targs (3), delims = ',', &
                         args = args, nargs = nargs)
    DO i = 1, nargs
        dayOfMonth = StringToLong (args (i) )
        cron % daysOfMonth ( dayOfMonth ) = 1
    END DO
ELSE IF ( INDEX (targs (2), '-' )  > 0   ) THEN
    CALL StringTokenize (string = targs (3), delims = '-', &
                         args = args, nargs = nargs)
    j = StringToLong (args (1) )
    k = StringToLong (args (2) )
    DO i = j, k
        cron % daysOfMonth ( i ) = 1
    END DO
ELSE 
    dayOfMonth = StringToLong ( targs (3) )
    cron % daysOfMonth ( dayOfMonth ) = 1
END IF


!search for months
cron % months = 0
IF ( targs (4) (1:1) == '*' ) THEN
    cron % months = 1
ELSE IF ( INDEX (targs (4), ',' )  > 0   ) THEN
    CALL StringTokenize (string = targs (4), delims = ',', &
                         args = args, nargs = nargs)
    DO i = 1, nargs
        month = StringToLong (args (i) )
        cron % months ( month ) = 1
    END DO
ELSE IF ( INDEX (targs (2), '-' )  > 0   ) THEN
    CALL StringTokenize (string = targs (4), delims = '-', &
                         args = args, nargs = nargs)
    j = StringToLong (args (1) )
    k = StringToLong (args (2) )
    DO i = j, k
        cron % months ( i ) = 1
    END DO
ELSE 
    month = StringToLong ( targs (4) )
    cron % months ( month ) = 1
END IF


!search for days of week
cron % daysOfWeek = 0
IF ( targs (5) (1:1) == '*' ) THEN
    cron % daysOfWeek = 1
ELSE IF ( INDEX (targs (5), ',' )  > 0   ) THEN
    CALL StringTokenize (string = targs (5), delims = ',', &
                         args = args, nargs = nargs)
    DO i = 1, nargs
        dayOfWeek = StringToLong (args (i) )
        cron % daysOfWeek ( dayOfWeek ) = 1
    END DO
ELSE IF ( INDEX (targs (2), '-' )  > 0   ) THEN
    CALL StringTokenize (string = targs (5), delims = '-', &
                         args = args, nargs = nargs)
    j = StringToLong (args (1) )
    k = StringToLong (args (2) )
    DO i = j, k
        cron % daysOfWeek ( i ) = 1
    END DO
ELSE 
    dayOfWeek = StringToLong ( targs (5) )
    cron % daysOfWeek ( dayOfWeek ) = 1
END IF

RETURN

END SUBROUTINE CronParseString